package com.example.presentshopping.config.base;

import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Handler;
import android.os.StrictMode;

import androidx.annotation.NonNull;
import androidx.camera.camera2.Camera2Config;
import androidx.camera.core.CameraXConfig;
import androidx.multidex.MultiDex;

import com.blankj.utilcode.util.Utils;
import com.example.presentshopping.R;
import com.example.presentshopping.config.bean.UserInfoBean;
import com.example.presentshopping.net.http.OKHttpUpdateHttpService;
import com.example.presentshopping.net.manager.RxHttpManager;
import com.luck.picture.lib.app.IApp;
import com.luck.picture.lib.app.PictureAppMaster;
import com.luck.picture.lib.crash.PictureSelectorCrashUtils;
import com.luck.picture.lib.engine.PictureSelectorEngine;
import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.api.RefreshFooter;
import com.scwang.smart.refresh.layout.api.RefreshHeader;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.DefaultRefreshFooterCreator;
import com.scwang.smart.refresh.layout.listener.DefaultRefreshHeaderCreator;
import com.xuexiang.xupdate.XUpdate;
import com.xuexiang.xupdate.entity.UpdateError;
import com.xuexiang.xupdate.listener.OnUpdateFailureListener;
import com.xuexiang.xupdate.utils.UpdateUtils;
import com.xuexiang.xutil.tip.ToastUtils;

import java.util.ArrayList;
import java.util.List;

import static com.xuexiang.xupdate.entity.UpdateError.ERROR.CHECK_NO_NEW_VERSION;

public class MyApplication extends Application implements IApp , CameraXConfig.Provider{


    private static Context mContext;
    private static MyApplication mInstance;

    public static MyApplication getInstance() {
        return mInstance;
    }

    public static List<Bitmap> bitmapList =new ArrayList<>();
    public static UserInfoBean  userInfoBean = new UserInfoBean();

    // 当前线程id
    public static int mainThreadId;
    public static Handler handler;

    public static Context getContext() {
        return mContext;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        XUpdate.get().init(this);
        mInstance = this;
        mContext = getApplicationContext();
        initUpdate();
        /**
         * RxHttp初始化
         */
        RxHttpManager.init(this);
        //允许7.0手机打开手机下的文件路径  否则将进不去拍照功能
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder b = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy(b.build());
        }
        //64k方法限制
        MultiDex.install(this);

        /**
         * 工具类库  初始化
         * init it in the function of onCreate in ur Application
         */
        Utils.init(mContext);

        /**
         * 图片选择器 PictureSelector 2.0：日志管理配制开始
         * 需要class implements IApp, CameraXConfig.Provider
         */
        // PictureSelector 绑定监听用户获取全局上下文或其他...2
        PictureAppMaster.getInstance().setApp(this);
        // PictureSelector Crash日志监听
        PictureSelectorCrashUtils.init((t, e) -> {
            // Crash之后的一些操作
            // 可再此处理，没有就忽略...
        });

    }



    private void initUpdate() {
        XUpdate.get()
                .debug(true)
                .isWifiOnly(false)                                               //默认设置只在wifi下检查版本更新
                .isGet(true)                                                    //默认设置使用get请求检查版本
                .isAutoMode(false)                                              //默认设置非自动模式，可根据具体使用配置
                .param("versionCode", UpdateUtils.getVersionCode(this))  //设置默认公共请求参数
                .param("appKey", getPackageName())
                .setOnUpdateFailureListener(new OnUpdateFailureListener() { //设置版本更新出错的监听
                    @Override
                    public void onFailure(UpdateError error) {
                        error.printStackTrace();
                        if (error.getCode() != CHECK_NO_NEW_VERSION) {          //对不同错误进行处理
                            ToastUtils.toast(error.toString());
                        }
                    }
                })
                //设置是否支持静默安装，默认是true
                .setIUpdateHttpService(new OKHttpUpdateHttpService())           //这个必须设置！实现网络请求功能。
                .init(this);                                          //这个必须初始化

    }
    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
            @Override
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                layout.setPrimaryColorsId(R.color.white, R.color.colorpage);//全局设置主题颜色
                return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header，默认是 贝塞尔雷达Header
            }
        });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
            @Override
            public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                //指定为经典Footer，默认是 BallPulseFooter
                return new ClassicsFooter(context).setDrawableSize(20);
            }
        });
    }

    /**
     * 图片选择器 PictureSelector 2.0：日志管理配制开始
     */
    @NonNull
    public CameraXConfig getCameraXConfig() {
        return Camera2Config.defaultConfig();
    }
    /**
     * 图片选择器 PictureSelector 2.0：日志管理配制开始
     */

    public Context getAppContext() {
        return this;
    }

    public PictureSelectorEngine getPictureSelectorEngine() {
        return null;
    }
}
